package cn.sytton.taffecloud.common.db.validation;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

@Documented
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = ValidatorDuplicate.class)
public @interface NotDuplicate {

    Field[] value() default {};

    // 从查询的数据中排除字段名为excludeByField的数据，一般是此Entity的主键，为空则不做任何排除
    // 此类中这个参数的优先级较低，Field类中有同样的参数，其优先级较高，只有Field中的参数为空，才取此类中的参数
    String excludeByField() default "";

    // 执行查询的mapper类实例,beanId, 为空时取Entity的业务对应的mapper, 例如RoleEntity 取 raleMapper
    String mapperName() default "";

    // 执行查询的方法，并且时mapperName类中的方法，为空时获取findList(Map<String, Object> parma)方法
    // 这个参数要注意，方法的形参必须时一个Map，这里需要后续优化
    String mapperMethod() default "";

    //这个参数没有用到,但是不加会报错 NotDuplicate contains Constraint annotation, but does not contain a message parameter
    String message() default "数据已存在";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}
